// 根据url获取文件以及文件流
async function getFile(url, fileName) {
    // 通过 url 获取到 File
    function getFileFromUrl(url, fileName) {
        return new Promise((resolve, reject) => {
            let blob = null
            const xhr = new XMLHttpRequest()
            xhr.open('GET', url)
            // 这里设置接收的响应体类型(试了不设置也正常)
            xhr.setRequestHeader('Accept', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
            xhr.responseType = 'blob'
            // 加载时处理(异步)
            xhr.onload = () => {
                // 获取返回结果
                blob = xhr.response
                console.log('blob:', blob)
                const file = new File([blob], fileName, { type: blob.type })
                // 返回结果
                resolve(file)
            }
            xhr.onerror = (e) => {
                reject(e)
            }
            // 发送
            xhr.send()
        })
    }
    const file = await getFileFromUrl(url, fileName)
    console.log('file:', file)
}
// 这个地址没有跨域问题 https://img2.baidu.com/it/u=2149607209,2234358780&fm=253&fmt=auto&app=138&f=JPEG?w=450&h=255
const url1 = 'http://101.132.163.3:9000/inap/1666245717475-54?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20221020%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221020T061309Z&X-Amz-Expires=172800&X-Amz-SignedHeaders=host&X-Amz-Signature=261ac810c1f01d262f1c039ffd79c47e3692f5f2be579da6e9f4afff423ae041'
const fileName = '文件名称'
getFile(url1, fileName)

// 普通下载
export const download = (url:string, name:string) => {
    const domA = document.createElement('a')
    domA.download = name
    domA.style.display = 'none'
    url = url.split('://')[1]
    url = url.substring(url.indexOf('/'))
    domA.href = `${location.protocol}//${location.host}${url}`
    document.body.appendChild(domA)
    domA.click()
    document.body.removeChild(domA)
}

// 文件流下载
export default function (url, params) {
    return new Promise((resolve, reject) => {
        const xhr = new XMLHttpRequest()
        xhr.open('POST', (Vue.prototype.BASE_API ? Vue.prototype.BASE_API : '') + url, true) // 也可以使用POST方式，根据接口
        // xhr.setRequestHeader('Authorization', getToken()) 添加token
        xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8')
        xhr.responseType = 'blob' // 返回类型blob
        // 定义请求完成的处理函数，请求前也可以增加加载框/禁用下载按钮逻辑
        xhr.onload = function () {
            // 请求完成
            if (this.status === 200) {
                if (this.response.type === 'application/json') {
                    reject(this.response)
                    return
                }
                // 返回200
                const reader = new FileReader()
                reader.readAsDataURL(this.response) // 转换为base64，可以直接放入a表情href
                reader.onload = function (e) {
                    const filename = decodeURIComponent(xhr.getResponseHeader('Content-disposition').split('filename=')[1].split('.')[0])
                    // 转换完成，创建一个a标签用于下载
                    const downEl = document.createElement('a')
                    downEl.download = filename
                    downEl.href = e.target.result
                    document.body.appendChild(downEl) // 修复firefox中无法触发click
                    downEl.click()
                    document.body.removeChild(downEl)
                }
                resolve(this.response)
            } else {
                reject(this.response)
            }
        }
        // 发送ajax请求
        xhr.send(JSON.stringify(params))
    })
}
